home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d13
/
pdsrt211.arc
/
PDSORT.DOC
< prev
next >
Wrap
Text File
|
1990-06-18
|
15KB
|
306 lines
PDSORT
A Public Domain External Sort Program
Author: Don A. Williams
Version: 2.0.0
Date: May 18, 1990
**************************** NOTICE! **************************
* Contrary to the current trend in MS-DOS software this *
* program, for whatever it is worth, is NOT copyrighted *
* (with the exception of the runtime library from Borland *
* International's Turbo C)! The program, in whole or in *
* part, may be used freely in any fashion or environment *
* desired. If you find this program to be useful to you, *
* do NOT send any contribution to the author; in the words *
* of Rick Conn, 'Enjoy!' However, if you make any *
* improvements, I would enjoy receiving a copy of the *
* modified source. I can be reached, usually within 24 *
* hours, by messages on any of the Phoenix systems, *
* particularly: *
* *
* The Tool Shop BBS [PCBOARD] *
* (602) 279-2673 1200/2400/9600 bps *
* (Good luck trying! VERY BUSY!) *
* Technoids Anonymous [PCBOARD] *
* (602) 899-4876 300/1200/2400 bps *
* *
* All can be reached through PC Pursuit. *
* *
* or: *
* on GEnie, mail address: DON-WILL *
* on CompuServ: 75410,543 *
* *
* Every effort has been made to avoid error and moderately *
* extensive testing has been performed on this program, *
* however, the author does not warrant it to be fit for any *
* purpose or to be free from error and disclaims any *
* liability for actual or any other damage arising from the *
* use of this program. *
*****************************************************************
PDSORT is a fully public domain external sort program, i.e. it can
sort files that are too big to be wholly contained in memory. The
length of the file that can be sorted by PDSORT is limited only by the
available disk space, however, you must have at least twice as much
free space as the length of the file to be sorted - PDSORT uses an
intermediate file the size of the input file and the sorted output
file will be the same size as the input file.
USAGE:
There are two forms for executing PDSORT:
pdsort in_file out_file [option] max_record_length [key_spec ....]
and:
pdsort - [option] max_record_length [key_spec ....] <in_file >out_file
In the first form, the input_file specification can be any standard
MS-DOS file specification including full path specifications but may
NOT contain "wild cards". The output_file specification may also be
any standard MS-DOS file specification not containing "wild cards".
The input_file and output_file names may be the same but, in this
case, the input_file will be destroyed by PDSORT by overwriting it
with the input file. The max_record_length argument is required and
no records in the input file may exceed this value. If a record is
detected in the input file that exceeds the specified maximum record
length, PDSORT will issue a message identifying the record and will
terminate.
In the second form, PDSORT executes as a "filter", reading and sorting
standard input to produce standard output, both of which may ne
redirected.
Options:
The only options supported by version 2.0.0 of PDSORT are:
-······A single '-', delimited by blanks, instructs PDSORT to
operate as a filter, taking its input from standard input
and sending its output to standard output.
-tpath·The '-t option allows the user to specify the path for the
intermediate file created by PDSORT. If no such path is
specified, PDSORT will use the path of the output file as
the path of the intermediate file. If the "filter" option
is selected and no intermediate file path is specified, the
intermediate file will be created in the current directory.
Key Specification:
There may be as many keys specified as you wish. The file will be
sorted on the keys in the order in which they are specified. Each
key_spec has one of the following two formats:
b:l:[field_options]
or:
b-e:[field_options]
where:
b·-·Specifies the beginning character position of the field in
decimal; i.e to sort a field that is in columns 10 through 17
of the record, b would be 10.
l·-·Specifies the length of the field in characters; i.e to sort a
field that is in columns 10 through 17 of the record, l would
be 8 - 10:8[:options].
e·-·Specifies the ending character position of the field in
decimal, inclusive; i.e to sort a file that is in characters
10 through 17 of the record with this format of the field
specifier would require the e be 17 - 10-17[:options].
Field Options:
a·-·Specifies that the sort on this field is to be in ascending
order, the default if no field option is specified for this
field.
d·-·Specifies that the sort on this field is to be in descending
order.
c·-·Specifies that the sort on this field is to be case sensitive;
i.e. the word Abscess" would sort lower that the word
"abscess". A case sensitive sort is the default if none
is specified.
i·-·Specifies that the sort on this field is to be case
insensitive.
c·-·Specifies that this field is ASCII character data, the default
if not specified. Since PDSORT 2.0.0 supports only ASCII
character fields, this option if only for upward compatibility
with future version of PDSORT that may support other field
types such as integer (numeric).
Examples:
Assume a file, named FILELIST, that contains a list of file name,
sizes, date/times, and paths, such as can be created by NUFIND:
a----w 27,974 90-04-30 6:30 c:\acelst.430
a----w 28,196 90-05-21 5:05 c:\acelst.521
a----w 28,238 90-05-25 5:41 c:\acelst.525
a----w 26,705 90-05-25 5:39 c:\acelst.lst
a----w 128,537 90-05-25 5:41 c:\acelst.zip
a----w 904 90-05-23 4:33 c:\autoexec.bat
a----w 35,840 89-06-30 12:16 c:\command.com
a----w 46 89-08-20 3:53 c:\config.cal
a----w 284 90-05-21 19:52 c:\config.sys
a----w 2,128 90-05-23 4:32 c:\configur.dat
------ 39,385 89-07-14 12:00 c:\drbdos.sys
------ 18,304 89-06-30 12:16 c:\drbios.sys
---sh- 4,096 90-03-18 13:22 c:\drildr.sys
a----w 167 89-10-11 7:56 c:\dsas.cmd
a----w 102 86-11-04 9:14 c:\ed.def
a----w 50,326 86-10-02 21:34 c:\ed.hlp
a----w 3,362 86-06-09 13:10 c:\fakey.com
a----w 0 90-05-23 7:54 c:\ftf.dat
a----w 12,275 85-06-16 18:12 c:\helpe.def
a----w 79 89-05-17 5:02 c:\indent.pro
a----w 7,122 90-01-15 1:00 c:\lineend.com
a----w 1,060 90-05-25 9:40 c:\mark0
a--sh- 41 90-05-25 9:40 c:\mirorsav.fil
a----- 41,472 90-05-25 9:40 c:\mirror.bak
a----- 41,472 90-05-25 9:40 c:\mirror.fil
a----w 237 90-02-06 5:09 c:\model
a----w 12,432 87-03-10 13:34 c:\mouse.sys
a----w 2,507 87-10-21 13:45 c:\nansi.sys
a----w 251 87-07-16 18:06 c:\newkbios.com
a----w 6,094 89-11-21 15:03 c:\no101.com
a----w 2,836 90-05-03 7:21 c:\phone.dir
a----w 2,670 89-12-01 17:00 c:\phones
a----w 2,010 90-03-18 11:14 c:\pushdir.stk
a----w 90 89-09-05 3:29 c:\ruler.def
a----w 1,465 87-04-22 10:38 c:\ruler.prt
a----w 53,632 85-05-03 14:09 c:\sk.hlp
a----w 33,611 86-12-05 9:21 c:\skn.com
a----w 18,825 90-01-15 1:00 c:\synonym.com
a----w 1,610 90-05-13 16:15 c:\synonym.def
a----w 14,426 90-05-19 17:38 c:\utils
a----w 1,060 90-05-25 12:17 c:\mark1
The file path name begins in column 40 and extends through 80, the
file size is in columns 15 through 23, inclusive, the file date is in
columns 25 through 32, inclusive, and the file time is in columns 34
through 39, inclusive.
A PDSORT command sort this list so that the largest files are first
and files of equal size are in name order would require the following
command:
pdsort filelist fileout 80 15-23:d 44-80
giving the following list in the file FILEOUT:
a----w 128,537 90-05-25 5:41 c:\acelst.zip
a----w 53,632 85-05-03 14:09 c:\sk.hlp
a----w 50,326 86-10-02 21:34 c:\ed.hlp
a----- 41,472 90-05-25 9:40 c:\mirror.bak
a----- 41,472 90-05-25 9:40 c:\mirror.fil
------ 39,385 89-07-14 12:00 c:\drbdos.sys
a----w 35,840 89-06-30 12:16 c:\command.com
a----w 33,611 86-12-05 9:21 c:\skn.com
a----w 28,238 90-05-25 5:41 c:\acelst.525
a----w 28,196 90-05-21 5:05 c:\acelst.521
a----w 27,974 90-04-30 6:30 c:\acelst.430
a----w 26,705 90-05-25 5:39 c:\acelst.lst
a----w 18,825 90-01-15 1:00 c:\synonym.com
------ 18,304 89-06-30 12:16 c:\drbios.sys
a----w 14,426 90-05-19 17:38 c:\utils
a----w 12,432 87-03-10 13:34 c:\mouse.sys
a----w 12,275 85-06-16 18:12 c:\helpe.def
a----w 7,122 90-01-15 1:00 c:\lineend.com
a----w 6,094 89-11-21 15:03 c:\no101.com
---sh- 4,096 90-03-18 13:22 c:\drildr.sys
a----w 3,362 86-06-09 13:10 c:\fakey.com
a----w 2,836 90-05-03 7:21 c:\phone.dir
a----w 2,670 89-12-01 17:00 c:\phones
a----w 2,507 87-10-21 13:45 c:\nansi.sys
a----w 2,128 90-05-23 4:32 c:\configur.dat
a----w 2,010 90-03-18 11:14 c:\pushdir.stk
a----w 1,610 90-05-13 16:15 c:\synonym.def
a----w 1,465 87-04-22 10:38 c:\ruler.prt
a----w 1,060 90-05-25 9:40 c:\mark0
a----w 1,060 90-05-25 12:17 c:\mark1
a----w 904 90-05-23 4:33 c:\autoexec.bat
a----w 284 90-05-21 19:52 c:\config.sys
a----w 251 87-07-16 18:06 c:\newkbios.com
a----w 237 90-02-06 5:09 c:\model
a----w 167 89-10-11 7:56 c:\dsas.cmd
a----w 102 86-11-04 9:14 c:\ed.def
a----w 90 89-09-05 3:29 c:\ruler.def
a----w 79 89-05-17 5:02 c:\indent.pro
a----w 46 89-08-20 3:53 c:\config.cal
a--sh- 41 90-05-25 9:40 c:\mirorsav.fil
a----w 0 90-05-23 7:54 c:\ftf.dat
The same sort could be accomplished by the command:
pdsort - 80 15-23:d 40-80 <filelist >fileout
Now suppose that you wanted the most recently modified or created files
first. The following command would do that:
pdsort filelist fileout 80 25-32:d 34-39:d 40-80
giving the following list in FILEOUT:
a----w 1,060 90-05-25 12:17 c:\mark1
a----w 1,060 90-05-25 9:40 c:\mark0
a--sh- 41 90-05-25 9:40 c:\mirorsav.fil
a----- 41,472 90-05-25 9:40 c:\mirror.bak
a----- 41,472 90-05-25 9:40 c:\mirror.fil
a----w 28,238 90-05-25 5:41 c:\acelst.525
a----w 128,537 90-05-25 5:41 c:\acelst.zip
a----w 26,705 90-05-25 5:39 c:\acelst.lst
a----w 0 90-05-23 7:54 c:\ftf.dat
a----w 904 90-05-23 4:33 c:\autoexec.bat
a----w 2,128 90-05-23 4:32 c:\configur.dat
a----w 284 90-05-21 19:52 c:\config.sys
a----w 28,196 90-05-21 5:05 c:\acelst.521
a----w 14,426 90-05-19 17:38 c:\utils
a----w 1,610 90-05-13 16:15 c:\synonym.def
a----w 2,836 90-05-03 7:21 c:\phone.dir
a----w 27,974 90-04-30 6:30 c:\acelst.430
---sh- 4,096 90-03-18 13:22 c:\drildr.sys
a----w 2,010 90-03-18 11:14 c:\pushdir.stk
a----w 237 90-02-06 5:09 c:\model
a----w 7,122 90-01-15 1:00 c:\lineend.com
a----w 18,825 90-01-15 1:00 c:\synonym.com
a----w 2,670 89-12-01 17:00 c:\phones
a----w 6,094 89-11-21 15:03 c:\no101.com
a----w 167 89-10-11 7:56 c:\dsas.cmd
a----w 90 89-09-05 3:29 c:\ruler.def
a----w 46 89-08-20 3:53 c:\config.cal
------ 39,385 89-07-14 12:00 c:\drbdos.sys
a----w 35,840 89-06-30 12:16 c:\command.com
------ 18,304 89-06-30 12:16 c:\drbios.sys
a----w 79 89-05-17 5:02 c:\indent.pro
a----w 2,507 87-10-21 13:45 c:\nansi.sys
a----w 251 87-07-16 18:06 c:\newkbios.com
a----w 1,465 87-04-22 10:38 c:\ruler.prt
a----w 12,432 87-03-10 13:34 c:\mouse.sys
a----w 33,611 86-12-05 9:21 c:\skn.com
a----w 102 86-11-04 9:14 c:\ed.def
a----w 50,326 86-10-02 21:34 c:\ed.hlp
a----w 3,362 86-06-09 13:10 c:\fakey.com
a----w 12,275 85-06-16 18:12 c:\helpe.def
a----w 53,632 85-05-03 14:09 c:\sk.hlp
Again, the same sort could have been accomplished by the following
command:
pdsort - 25-32:d 34-39:d 40-80 <filelist >fileout